package com.midou.administration.utils;

import com.midou.administration.entity.Coupon;
import com.midou.administration.service.CouponService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.TimeUnit;

/**
 * 定时任务类
 */
@Component
@Configuration      //1.主要用于标记配置类，兼备Component的效果。
@EnableScheduling   // 2.开启定时任务
public class TimedTask {

    @Autowired
    private CouponService service;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    private static final Set set = new HashSet();

    @Scheduled(cron = "*/5 * * * * ?")
    public void cron() {
        System.out.println("执行");
        /**
         * 获取 没有被redis存储的 活动信息
         * 将查活动信息
         * 判断开始时间
         * 当前时间    开始时间     结束时间
         * 10000     9999      10009
         * 2021-4-9  2021-4-10   2021-4-11
         * 10008 - 10000 + 10009 - 10000
         * 开始时间戳 - 当前时间戳 + 结束时间戳 - 开始时间戳
         */
//        将库中的 活动砖状态为0的活动信息添加到redis当中
        List<Coupon> list = this.service.queryByState(0);
        System.out.println("数量是:"+list.size());
        for (Coupon c : list) {
            this.stringRedisTemplate.opsForValue().set("seckill:stock:"+c.getCpId(),c.getCpNum().toString());
            //开始时间戳 - 当前时间戳    +   结束时间戳 - 开始时间戳
            long time = zh(c.getCpBeginTime()) - zh(new Date()) + zh(c.getCpEndTime()) - zh(c.getCpBeginTime());

            //放入到redis当中是 并设置过期时间
            time = time - 5;
            this.stringRedisTemplate.expire("seckill:stock:"+c.getCpId(),time, TimeUnit.SECONDS);
            System.out.println("存入成功" + "seckill:stock:"+c.getCpId()+"redisTTL是:"+time);
        }

        if(list.size()!=0) {
            //如果存入成功就批量更新  成 1
            this.service.updListState(list);
        }


    }



    /**
     * 计算时间戳
     * @param date 要计算的时间
     * @return  long时间戳
     */
    public long zh(Date date){
        long ts = date.getTime();
        ts = ts/1000;
        return ts;
    }


}
